﻿<?xml version="1.0" encoding="utf-8"?>

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name='Root'>
        <xs:complexType>
            <xs:sequence>
                <xs:element name='Customers'>
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name='Customer'
                                        type='CustomerType'
                                        minOccurs='0'
                                        maxOccurs='unbounded' />
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
                <xs:element name='Orders'>
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name='Order'
                                        type='OrderType'
                                        minOccurs='0'
                                        maxOccurs='unbounded' />
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
        <xs:key name='CustomerIDKey'>
            <xs:selector xpath='Customers/Customer'/>
            <xs:field xpath='@CustomerID'/>
        </xs:key>
        <xs:keyref name='CustomerIDKeyRef'
                   refer='CustomerIDKey'>
            <xs:selector xpath='Orders/Order'/>
            <xs:field xpath='CustomerID'/>
        </xs:keyref>
    </xs:element>
    
    <xs:complexType name='CustomerType'>
        <xs:sequence>
            <xs:element name='CompanyName'
                        type='xs:string'/>
            <xs:element name='ContactName'
                        type='xs:string'/>
            <xs:element name='ContactTitle'
                        type='xs:string'/>
            <xs:element name='Phone'
                        type='xs:string'/>
            <xs:element name='Fax'
                        minOccurs='0'
                        type='xs:string'/>
            <xs:element name='FullAddress'
                        type='AddressType'/>
        </xs:sequence>
        <xs:attribute name='CustomerID'
                      type='xs:token'/>
    </xs:complexType>
    <xs:complexType name='AddressType'>
        <xs:sequence>
            <xs:element name='Address'
                        type='xs:string'/>
            <xs:element name='City'
                        type='xs:string'/>
            <xs:element name='Region'
                        type='xs:string'/>
            <xs:element name='PostalCode'
                        type='xs:string' />
            <xs:element name='Country'
                        type='xs:string'/>
        </xs:sequence>
        <xs:attribute name='CustomerID'
                      type='xs:token'/>
    </xs:complexType>
    <xs:complexType name='OrderType'>
        <xs:sequence>
            <xs:element name='CustomerID'
                        type='xs:token'/>
            <xs:element name='EmployeeID'
                        type='xs:token'/>
            <xs:element name='OrderDate'
                        type='xs:dateTime'/>
            <xs:element name='RequiredDate'
                        type='xs:dateTime'/>
            <xs:element name='ShipInfo'
                        type='ShipInfoType'/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name='ShipInfoType'>
        <xs:sequence>
            <xs:element name='ShipVia'
                        type='xs:integer'/>
            <xs:element name='Freight'
                        type='xs:decimal'/>
            <xs:element name='ShipName'
                        type='xs:string'/>
            <xs:element name='ShipAddress'
                        type='xs:string'/>
            <xs:element name='ShipCity'
                        type='xs:string'/>
            <xs:element name='ShipRegion'
                        type='xs:string'/>
            <xs:element name='ShipPostalCode'
                        type='xs:string'/>
            <xs:element name='ShipCountry'
                        type='xs:string'/>
        </xs:sequence>
        <xs:attribute name='ShippedDate'
                      type='xs:dateTime'/>
    </xs:complexType>
</xs:schema>